/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import model.dominio.Disciplina;

/**
 *
 * @author
 */
public class DisciplinaDao {

    static final String NEW_LINE = System.getProperty("line.separator");

    public DisciplinaDao() {
        try {
            File f = new File("disciplinas.txt");

            FileWriter fw;
            fw = new FileWriter(f, true);
            PrintWriter pw = new PrintWriter(fw);
            pw.print("");
            pw.flush();
            pw.close();
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao gravar no arquivo, por favor contate o administrador.");
        }
    }

    public boolean registrar(Disciplina disciplina) {
        try {
            File f = new File("disciplinas.txt");

            FileWriter fw = new FileWriter(f, true);
            PrintWriter pw = new PrintWriter(fw);

            int codigoDisciplina = buscarVarias().size() + 1;
            disciplina.setCodigoDisciplina(codigoDisciplina);
            pw.println(disciplina.toString());
            pw.flush();
            pw.close();
            return true;
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao gravar no arquivo, por favor contate o administrador.");
            return false;
        }
    }

    public Disciplina buscar(int codigoDisciplina) {
        FileReader fr = null;
        try {
            File f = new File("disciplinas.txt");
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
            String codigo = String.format("%04d", codigoDisciplina);
            String linha = "";
            while ((linha = bfr.readLine()) != null) {
                if (linha.contains(codigo + "///")) {
                    return stringToObject(linha);
                }
            }
            return null;
        } catch (FileNotFoundException ex) {
            System.out.println("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
        return null;
    }

    public ArrayList<Disciplina> buscarVarias() {
        FileReader fr = null;
        try {
            File f = new File("disciplinas.txt");
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);

            String linha = "";
            ArrayList<Disciplina> lista = new ArrayList();
            while ((linha = bfr.readLine()) != null) {
                lista.add(stringToObject(linha));
            }
            return lista;
        } catch (FileNotFoundException ex) {
            System.out.println("Banco de dados não existente");
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao ler o arquivo");
        }
        return null;
    }

    //cria um objeto a partir da string gerada pelo toString
    public Disciplina stringToObject(String dados) {
        Disciplina disciplina = new Disciplina();
        String[] dados2 = dados.split("///");
        disciplina.setCodigoDisciplina(Integer.parseInt(dados2[0]));
        disciplina.setNome(dados2[1]);
        disciplina.setEmenta(dados2[2]);
        disciplina.setCargahoraria(Integer.parseInt(dados2[3]));
        return disciplina;
    }
}
